package com.example.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//提供了数据库连接、关闭资源和事务处理的基础功能

public class BaseDao {
	//数据库驱动类名、数据库URL、用户名和密码等常量
	private static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DBURL = "jdbc:mysql://localhost:3306/message_board?useSSL=false";
	private static final String DBUSER = "root";
	private static final String DBPASSWORD = "123456";
	//数据库连接对象。
	public Connection con;
	//数据库查询结果集对象
	public ResultSet rs;
	//用于执行SQL语句的预编译对象
	public PreparedStatement ps;

	public void getConnection(){//用于建立数据库连接
		try {
			Class.forName(DBDRIVER);//加载数据库驱动类
			con = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);//使用数据库驱动管理器建立连接。
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.printf("数据库驱动加载" + e.getMessage());
			e.printStackTrace();//如果指定的驱动类没有找到，会抛出这个异常
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.printf("数据库连接" + e.getMessage());
			e.printStackTrace();//如果数据库连接失败，会抛出这个异常。
		}
	}
	public void close(){
		try {
			if(con != null){
				con.close();//检查 Connection 对象是否不为 null，如果不为 null，则关闭它。这是为了避免 SQLException。SQLException：如果在关闭数据库资源时发生错误，会抛出这个异常。
			}
			if(rs != null){
				rs.close();//检查 ResultSet 对象是否不为 null，如果不为 null，则关闭它。ResultSet 是执行查询后返回的结果集。
			}
			if(ps != null){
				ps.close();//检查 PreparedStatement 对象是否不为 null，如果不为 null，则关闭它。PreparedStatement 是用于执行参数化查询的对象。
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			//打印一条错误消息，该消息包含异常对象 e 的详细信息。e.getMessage() 返回异常的描述，这有助于诊断问题。
			System.out.printf("数据库连接关闭" + e.getMessage());
            //它打印异常的堆栈跟踪到标准错误流
			e.printStackTrace();
		}
	}

	public void getTransaction() throws SQLException{
		getConnection();
		con.setAutoCommit(false);//关闭自动提交
	}

	public void commitTran() throws SQLException{
		if(con != null){
			con.commit();//提交当前事务
		}
	}

	public void rollbackTran() throws SQLException{
		if(con != null){
			con.rollback();//回滚
		}
	}

	public void closeTransaction() throws SQLException{
		if(con != null){
			con.close();//关闭数据库连接，在事务结束后调用
		}
	}
}
